﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;



namespace IssueTrackerServiceTest
{
    /// <summary>
    /// Summary description for ProjectServiceTest
    /// </summary>
    [TestClass]
    public class ProjectServiceTest
    {

        private ProjectService.ProjectServiceClient client;

        private int projectId;

        public ProjectServiceTest()
        {
            client = new ProjectService.ProjectServiceClient();
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion


        [TestMethod]
        public void TestAddProject()
        {
            ProjectService.Project project = new ProjectService.Project();

            project.Name = "Mock Test Project";
            project.Description = "Mock Test Project";
            project.CreatorId = 1;
            project.ProjectManagerId = 1;

            ProjectService.Project result = client.CreateProject(project);

            projectId = result.Id;
            
            Assert.IsNotNull(projectId);
        }

        [TestMethod]
        public void TestUpdateProject()
        {
            List<ProjectService.Project> list = client.ListProjects().ToList();

            if (list != null)
            {
                ProjectService.Project project = list.First();

                project.Description = "Mock Test Updated";

                ProjectService.Project result = client.UpdateProject(project);

                Assert.AreEqual("Mock Test Updated", result.Description);
            }
            else
            {
                Assert.Fail();
            }
        }

        [TestMethod]
        public void TestDeleteProject()
        {
            int projectId;
            List<ProjectService.Project> list = client.ListProjects().ToList();

            if (list != null)
            {
                ProjectService.Project project = list.First();

                projectId = project.Id;

                project.Description = "Mock Test Updated";

                client.DeleteProject(project);

                var checkProject = client.GetProject(projectId);

                Assert.IsNull(checkProject);
            }
            else
            {
                Assert.Fail();
            }
        }



    }
}
